#include <iostream>
#include <type_traits>
#include <functional>

using namespace std;

struct A
{
	template <typename T>
	void f(T t) { cout << typeid(t).name() << endl; }
};

int main()
{
	A a;
	auto f1 = mem_fn(&A::f<int>);
	cout << typeid(f1).name() << endl;
	f1(&a, 1);
	auto f2 = &A::f<int>;
	cout << typeid(f2).name() << endl;
	(a.*f2)(1);

	return 0;
}